#ifndef cfg_drive_H
#define cfg_drive_H

#include <main.h>
#include <stdint.h>

// 引脚枚举，和引脚配置表格一一对应
typedef enum
{
    // 电机驱动芯片睡眠使能
    SLP = 0,

    // 模拟开关片选
    SLP_SLC1,
    SLP_SLC2,
    SLP_SLC3,

    // 模拟开关芯片使能
    EN_CTR,

    // 电机驱动芯片步序
    IN_CH1,
    IN_CH2,
    IN_CH3,
    IN_CH4,

    // 电流监测芯片使能
    PWR_ON,

    // AD7689-SPI通信
    ADC_NSS,
    ADC_SCK,
    ADC_MISO,
    ADC_MOSI,

    // 计数一组配置引脚个数
    Count
} PinName;

// 引脚配置表格参数
typedef struct
{
    PinName name;
    uint16_t pin;
    GPIO_TypeDef *gpioPort;
} MotorPinConfig;

extern MotorPinConfig MotorPinConfigTable[4][Count];

// HAL_GPIO_WritePin/HAL_GPIO_ReadPin 封装成一个宏函数，找到对应的引脚配置表格
#define MOTOR_GPIO_WRITE_PIN(group, pinName, level) HAL_GPIO_WritePin(MotorPinConfigTable[group - 1][pinName].gpioPort, MotorPinConfigTable[group - 1][pinName].pin, level)
#define MOTOR_GPIO_READ_PIN(group, pinName)         HAL_GPIO_ReadPin(MotorPinConfigTable[group - 1][pinName].gpioPort, MotorPinConfigTable[group - 1][pinName].pin)

#endif